/*************************************************************************
	> File Name: oj-405_maze2.cpp
	> Author: Wang Bo
	> Mail: 1276106221@qq.com
	> Created Time: 2020年11月15日 星期日 19时47分46秒
 ************************************************************************/
#include <iostream>
#include <queue>
using namespace std;

//定义一个结构存放连通区域的点坐标
struct node {
    int x, y;
};
//存放点坐标的队列
queue<node> que;
int n, m, k, t, ans[3005][3005];
int dir[4][2] = {0, 1, 1, 0, 0, -1, -1, 0};
char mmap[3005][3005];

void check() {
    while (!que.empty()) {
        node tp = que.front();
        que.pop();
        ans[tp.x][tp.y] = t;
    }
}

void func(int x, int y) {
    que.push((node){x, y});
    for (int i = 0; i < 4; ++i) {
        int xx = x + dir[i][0];
        int yy = y + dir[i][1];
        if (xx < 1 || yy < 1 || xx > n || yy > m || ans[xx][yy] != 0) {
            continue;
        }
        //如果相邻点值不一样，可以走
        if (mmap[x][y] != mmap[xx][yy]) {
            //标记相邻点为1
            ans[xx][yy] = 1;
            //区域连通数+1
            t++;
            func(xx, yy);
        }
    }
}

int main() {
    cin >> n >> m >> k;
    for (int i = 1; i <= n; ++i) {
        cin >> &mmap[i][1];
    }
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= m; ++j) {
            //ans[i][j]为0表示这个点没走过
            if (ans[i][j] == 0) {
                //t表示当前点连通区域的大小
                t = 1;
                //先将当前点标记
                ans[i][j] = 1;
                //开始dfs
                func(i, j);
                //check函数将队列中的当前连通区域的点坐标加入到ans
                //并且赋值为t
                check();
            }
        }
    }
    int a, b;
    for (int i = 0; i < k; ++i) {
        cin >> a >> b;
        cout << ans[a][b] << endl;
    }
    return 0;
}
